function DoBatch
    clc
    close all
    fclose all
    fileName = 'F:\玉溪烟草\seed\seed_55.json';

    
    datapath = 'F:\玉溪烟草\seed\';%2022玉溪的图片
    args.bShow = false;
    args.datapath = datapath;
    args.savejson_dir = 'F:\玉溪烟草\matlab\样本扩增\';
    args.saveimg_dir = 'F:\玉溪烟草\matlab\样本扩增\';
    
    %%step 3:
    args.save_seg_json_dir = 'F:\玉溪烟草\matlab\seg\';%% 样本扩增
    args.save_seg_img_dir = 'F:\玉溪烟草\matlab\seg\';    
    
    args.template_file =  'F:\玉溪烟草\matlab\template.json';
    
    args.save_expand_json_dir = 'F:\玉溪烟草\matlab\expand\';%%Step 4
    args.save_expand_img_dir  = 'F:\玉溪烟草\matlab\expand\';   
    args.save_no_json_dir     = 'F:\玉溪烟草\matlab\expand\no\';%%
    args.save_no_img_dir      = 'F:\玉溪烟草\matlab\expand\no\';  
    

    
    
    args.save_Single_Leaf_dir = 'F:\玉溪烟草\matlab\single\';
    
    %%Step 7:
    args.save_seg_train_json = 'F:\玉溪烟草\matlab\seg\train\';
    args.save_seg_train_img  = 'F:\玉溪烟草\matlab\seg\train\';  
    args.saveTestImg_dir = 'F:\玉溪烟草\matlab\seg\test\';
    args.saveFilesOfTest = 'F:\玉溪烟草\matlab\filesOfTest.txt';
    
    %%Step 8:    
    args.save_image_bbox = 'F:\玉溪烟草\matlab\detect_all\';
    args.save_image_bbox = 'F:\玉溪烟草\matlab\detect_all\detect_all-2022-09-24\';%%可以注释，train和test一起
    args.saveFilesOfTest = 'F:\玉溪烟草\matlab\filesOfAll.txt';%%可以注释,当不需要train和test一起时可注释
    args.saveFileOfStat  = 'F:\玉溪烟草\matlab\filesOfStat.txt';
    
    %%Step 10:
    args.orign_json_path = 'F:\玉溪烟草\matlab\seg\test';    
    args.save_converted_dir = 'F:\玉溪烟草\matlab\seg\test\640';%% 640分辨率
%     args.orign_json_path = 'F:\玉溪烟草\matlab\expand';   
%     args.save_converted_dir = 'F:\玉溪烟草\matlab\expand\640';%% 640分辨率

    % % Step = 11:
     args.rotate_json_path = 'F:\玉溪烟草\matlab\enhance';
     args.save_rotate_path = 'F:\玉溪烟草\matlab\enhance\rotate\';

        
% %     datapath = args.save_seg_json_dir%%用作 step 4 数据提取的目录或step1中统计数据,
%     datapath = args.save_expand_json_dir%%用作 step 4 进行的step1中统计数据    
    
% % %     imdjson = imageDatastore(datapath, 'FileExtensions',{'.json'}, 'IncludeSubfolders', false);
% % %     DoLoadAllData(imdjson, datapath, args)
    args.givenFiles = true    %% 2023-03-13 增加特定文件的处理
    args.givenFiles = false   %% 注意此项开关 ， 针对个别文件重新开张Step3，
% %     args.filesInd = [22, 28, 30, 31];%%指定文件，通常这一类文件是JSON文件产生了变化
%     args.filesInd = 43:56;%%2023-06-21 新包衣学习指定文件，通常这一类文件是JSON文件产生了变化
%     args.filesInd = 43:66;
    args.filesInd = [44,45,54]; %%givenFiles=True时有用
    
    
    %% Step = 12; %%把指定文件里面的图片文件进行赋值
    args.specificFiles = 'F:\玉溪烟草\matlab\all-files.txt'; %% 由python程序生成
    args.specificFiles = 'F:\玉溪烟草\matlab\all-files2.txt'; %% 由python程序生成
    args.srcDir = 'F:\玉溪烟草\matlab\seg';
    args.destDir = 'F:\玉溪烟草\matlab\enhance';
    
    
   %% 用作指定目录的文件进行 Step 4
% % % %     args.save_expand_json_dir = 'F:\玉溪烟草\matlab\enhance\rotate\';%%Step 4
% % % %     args.save_expand_img_dir  = 'F:\玉溪烟草\matlab\enhance\rotate\';   
% % % %     args.save_no_json_dir     = 'F:\玉溪烟草\matlab\enhance\no\';%%
% % % %     args.save_no_img_dir      = 'F:\玉溪烟草\matlab\enhance\no\';  
% % % %     args.save_seg_train_json = 'F:\玉溪烟草\matlab\enhance\';
    %%%
    DoLoadAllData(datapath, args)
end

%% 加载全部文件
% % % % function DoLoadAllData(imdjson, args)
function DoLoadAllData(datapath, args)
    step1 = 1;      step2 = 2;     step3 = 4;       step4 = 8;
    step5 = 16;     step6 = 32;    step7 = 128;     step8 = 256;
    step9 = 512;    step10 = 1024;  step11 = 2048;  step12 = 4096;
    step13 = 8192;

    step = 0;
%     step = step + step1;%%用作统计，统计双叶、单叶的数量，长宽比，在step3后运行
%     step = step + step2;%%不再使用，直接无差别样本扩增
%     step = step + step3;%%第一步：大图分割生成小图800*800
    
%     step = step + step4;%%第三步：图片样本旋转扩增,根据Stpe7用作生成training set（以后可以加随机位置offset）还要选部分绿被子边界
% %     step = step + step5;%%提取 seed_1图片
% %     step = step + step6;%%只扩增图片（反转、逆时针），不处理JSON
%     step = step + step7;%%第二步：根据Step3，随机分成训练集与测试集,
% %     step = step + step8;%%对网络输出的结果，进行子图合并，nms等操作
% %    step = step + step9;%%检查坐标是否有负数
% %     step = step + step10;%% 新的把对应的图片与JSON转换为640*640
     step = step + step11;%% 把指定目录的文件进行4翻转
%     step = step + step12;%% 把文件中指定的文件复制到指定目录
%     step = step + 13; %% 指定

    if bitand(step, step4)  
        imdjson = imageDatastore(args.save_seg_train_json, 'FileExtensions',{'.json'}, 'IncludeSubfolders', false);
    elseif bitand(step, step8)  %%不构造
        kkk = 1;
    elseif bitand(step, step10)  %%
        imdjson = imageDatastore(args.orign_json_path, 'FileExtensions',{'.json'}, 'IncludeSubfolders', false);
    elseif bitand(step, step11)  %%
        imdjson = imageDatastore(args.rotate_json_path, 'FileExtensions',{'.json'}, 'IncludeSubfolders', false);
    else
        imdjson = imageDatastore(datapath, 'FileExtensions',{'.json'}, 'IncludeSubfolders', false);
    end
    
    %% 增加特定文件筛选 2023-03-13
    if args.givenFiles == true
        ind =  args.filesInd;
        imdjson.Files = imdjson.Files(ind);
    end
    
    
    % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
    %% 第一步统计
    if bitand(step, step1)     
        disp('Step 1. ...............');
        
        areas = [];
        wwhh = [];
        whOne = [];
        totalSeed = 0;
        totalSeedOne = 0;
        for i = 1 : length(imdjson.Files)  
%             disp([num2str(i), '__', imdjson.Files{i}]);
  
            fileName = imdjson.Files{i};
            [dirpath,imgName,~] = fileparts(fileName);
               
            
            json_obj = JsonObject(fileName, false, true);
            imgPath = json_obj.get_imagePath();
            
            www = json_obj.json_data.imageWidth;
            hhh = json_obj.json_data.imageHeight;
            stat = json_obj.statSeeds();
            strOut = sprintf('%s, seed:\t%d\tseed_1:\t%d\tpartial:\t%d\t. ww=%d, hh=%d, sMax:%.1f, sMin:%.1f, aMax:%.1f, aMin:%.1f', ...
                             imgPath, stat.seed, stat.seed_1, stat.partial, ...
                             www, hhh, ...
                             stat.sideMax, stat.sideMin, sqrt(stat.areaMax), sqrt(stat.areaMin));
            disp(strOut)
            totalSeed = totalSeed + stat.seed;
            totalSeedOne = totalSeedOne + stat.seed_1;
            
            areas = [areas; stat.areas];
            wwhh  = [wwhh;  stat.wwhh];
            whOne = [whOne;  stat.whOne];
        end
        figure,histogram(areas),title('box面积直方图');
        figure,plot(wwhh(:, 1), wwhh(:, 2), '.'),title('box长宽');
        axis equal
        xlim([0, 180])
        ylim([0, 180])
        figure,plot(whOne(:, 1), whOne(:, 2), '.'),title('单叶的box长宽');
        axis equal
        
        size(wwhh)
        size(whOne)
        disp([totalSeed, totalSeedOne])
        
    end
    savejson_dir = args.savejson_dir;
    saveimg_dir = args.saveimg_dir;
    
    % % % % % % % % % % % % % % % % % % % % % % % % % % %
    %%  样本扩增，翻转，逆时针旋转，已测试成功，但改用step4
    if bitand(step, step2)     
        disp('Step 2. ...............');
        bOrder = true;
        
        for i = 1 : length(imdjson.Files)  
            fileName = imdjson.Files{i};
            disp(fileName);           
            
            [dirpath,imgName,~] = fileparts(fileName);
            
            json_obj = JsonObject(fileName, bOrder);
            % % % % % 替换copyfile(fileName, savejson_dir);
            json_save = [savejson_dir, imgName, '.json'];            
            json_obj.saveJsonFile(json_save);
            % % % % % %
            
            imgPath = [dirpath, '\', json_obj.get_imagePath()];
            
            img = imread(imgPath);    

            copyfile(imgPath, saveimg_dir);
            
            %%drawBoxes(json_obj)
            
            SaveThreeRotation(json_obj, img, imgName, savejson_dir, saveimg_dir);
            
            SaveOneFlipAndThreeR(json_obj, img, imgName, savejson_dir, saveimg_dir);
        end        
    end
    % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
    % % Step 3：第一步：大图生成子图
    if bitand(step, step3)     
        template_file = args.template_file;
        json_temp = JsonObject(template_file);
        reOrder = true;
        reChangCellToStruct = true;
        disp('Step 3. ...............');
        myMap = containers.Map();
        for i = 1 : length(imdjson.Files)  
            fileName = imdjson.Files{i};
            disp(fileName);           
% %             if i ~= 5
% %                 myMap = load('all-map', 'myMap').myMap;        
% %                 continue
% %             end
            
            [dirpath, imgName, ~] = fileparts(fileName);              
            imgPath = [dirpath, '\', imgName, '.jpg'];            
            img = imread(imgPath);
            
            obj = CImage(imgPath);
% % % % %             obj.getPatchGrid();%%获取子网格，老用法    
            obj.getPatchGridEx();%%获取子网格   ，横竖固定
            
            json_src = JsonObject(fileName, reOrder, reChangCellToStruct);
            args.fileName = fileName;
            obj.segImagePieces(json_src, json_temp, img, args);
            myMap(imgName) = struct('cols', obj.columns, 'nums', obj.nums);%%记录图片的列数与数量
        end
        
        if args.givenFiles == false  %% 不限于特定文件
            save('all-map', 'myMap');  
        end
    end   
    
    % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
    %% 第三步：样本扩增，根据Step7生成的子图进行翻转 ，逆时针旋转
    %% 2022-09-08 改为只针对 train的样本进行扩增
    if bitand(step, step4)     
        disp('Step 4. ...............');
        bOrder = true;
        reChangCellToStruct = true;
        savejson_dir = args.save_expand_json_dir;
        saveimg_dir  = args.save_expand_img_dir; 
        saveno_dir = args.save_no_json_dir;
        rng(20220817)%%控制随机种子生成
        for i = 1 : length(imdjson.Files)  
            jsonName = imdjson.Files{i};
            disp(jsonName);           
            
            [dirpath, imgName, ext] = fileparts(jsonName);                    
            
            json_obj = JsonObject(jsonName, false, reChangCellToStruct);%%这些文件都已经排好序坐标  
            imgPath = fullfile(dirpath, json_obj.get_imagePath()); 
            
            if json_obj.hasShapes() == false%%没有叶子的，不训练
                disp(['   no shapes:', num2str(i)]);
                copyfile(jsonName, saveno_dir);   
                copyfile(imgPath, saveno_dir);
                continue;
            end
            if json_obj.hasAllPartials() == true
                disp(['   all partials:', num2str(i)]);
                copyfile(jsonName, saveno_dir);   
                copyfile(imgPath, saveno_dir);
                continue;
            end            
%             continue;
            
            jsonNameDst = fullfile(savejson_dir, [imgName, '__0.json']);
            imgNameDst  = fullfile(saveimg_dir, [imgName, '__0.jpg']);
            
            json_obj.json_data.imagePath = [imgName, '__0'];%%bug:没有设置好,复制了文件，没有修改改属性
            
            copyfile(jsonName, jsonNameDst);   
            copyfile(imgPath, imgNameDst);
            
            img = imread(imgPath);
            %%随机生成不同旋转的数据，有单叶就全7个方向，双叶值高1个
            if json_obj.hasSingleLeaf() == true %%如果有单叶的则处理7个
                nos = [1, 1, 1];
                begin = 1;
                SaveThreeRotation(json_obj, img, imgName, savejson_dir, saveimg_dir, nos, begin);
% % % % %                 nos = [1, 1, 1, 1];  %%yolov5那边预处理有翻转，这里就不再翻了2023-02-10
% % % % %                 begin = 4;
% % % % %                 SaveOneFlipAndThreeR(json_obj, img, imgName, savejson_dir, saveimg_dir, nos, begin);
            else %%如果都是双叶的，就随机做2个差不多
% % % %                 nos = zeros(1, 7);
% % % %                 kk = randperm(7);
% % % %                 nos(kk(1)) = 1;
% % % % % %                 nos(kk(2)) = 1;%%2022-09-06 只用随机1个了
% % % %                 begin = 1;
% % % %                 SaveThreeRotation(json_obj, img, imgName, savejson_dir, saveimg_dir, nos(1:3), begin);
% % % %                 begin = 4;
% % % %                 SaveOneFlipAndThreeR(json_obj, img, imgName, savejson_dir, saveimg_dir, nos(4:7), begin);
               %% 2023-02-10 由于Yolo5中的预处理有翻转操作，就不再采用发展，是否考虑yolo那边
                nos = zeros(1, 3);
                kk = randperm(3);%%随机1个
                nos(kk(1)) = 1;
                begin = 1;
                SaveThreeRotation(json_obj, img, imgName, savejson_dir, saveimg_dir, nos, begin);
            end
        end        
    end
    
    % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
    % % Step 5： 提取 seed_1图片
    if bitand(step, step5)     
        disp('Step 5. ...............');
        
        saveimg_dir = args.save_Single_Leaf_dir;
        for i = 1 : length(imdjson.Files)  
            fileName = imdjson.Files{i};
            disp(fileName);
%             fprintf(fileName);
            
            [dirpath, imgName, ~] = fileparts(fileName);
            
            json_obj = JsonObject(fileName);
            
            imgPath = [dirpath, '\', json_obj.get_imagePath()];            
            img = imread(imgPath);
 
            imgs = json_obj.cutSingleLeaf(img);
            
            if isempty(imgs) == true
                continue;
            end
            disp(['____', num2str(length(imgs))]);
            
            SaveImages(imgs, imgName, saveimg_dir);%%保存图片
        end
    end  
    % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
    % % Step 6： 只扩增图片（反转、逆时针），不处理JSON
    if bitand(step, step6)     
        disp('Step 6. ...............');
        for i = 1 : length(imdjson.Files)  
            fileName = imdjson.Files{i};
            disp(fileName);           
            
            [dirpath,imgName,~] = fileparts(fileName);
            
            json_obj = JsonObject(fileName);
            
            imgPath = [dirpath, '\', json_obj.get_imagePath()];            
            img = imread(imgPath);
            copyfile(imgPath, saveimg_dir);
            
            SaveThreeRotationImg(img, imgName, saveimg_dir);            
            SaveOneFlipAndThreeRImg(img, imgName, saveimg_dir);   
        end
    end
    % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
    % % Step 7： 第二步：生成测试集与训练集
    if bitand(step, step7)
         
        saveTestImg_dir = args.saveTestImg_dir;
        
        save_seg_img_dir = args.save_seg_img_dir;
        saveFilesOfTest_txt = args.saveFilesOfTest;
        saveFilesOfTest_mat = [saveFilesOfTest_txt, '.mat'];
        disp('Step 7. ...............');
        rng(20220906)%%控制随机种子生成
        rng(20221024)%%控制随机种子生成  最后生成的，有12/29单叶
        rng(20221222)%%控制随机种子生成
        rng(20230204)%%控制随机种子生成

        singles = [];
        one_leaf = [];
        fixTrain = [1, 5, 6, 9, 11,19,24, 28,29,39];
        fixTrain = [1,5,6,9,11,15,16,19,24,25,27,28,30,33,36,37,40];%%固定训练集 2023-01
        fixTrain = [1,5,6,9,11,15,19,24,25,27,29,30,32,33,35,36,37,40];%%固定训练集 2023-01
        

        sum_one_leaves = 0;
        for i = 1 : length(imdjson.Files)  
            fileName = imdjson.Files{i};
            disp(fileName);           
            
            [dirpath,imgName,~] = fileparts(fileName);            
            
            json_obj = JsonObject(fileName);
            
            nCount = json_obj.numOfSingleLeaf();
            if nCount <= 0
                continue;
            end
            if ismember(i, fixTrain) == false
                singles = [singles, i];
                one_leaf = [one_leaf, nCount];%%%2022-12-13
            end
            sum_one_leaves = sum_one_leaves + nCount;
        end        

        if isempty(singles)
            disp('error')
            return;
        end
        
        
        nLen = length(singles);
        kk = randperm(nLen);
        
        %% 2022-12-13 修改了随机过程
        singles = singles(kk);
        one_leaf = one_leaf(kk);
        leafs = cumsum(one_leaf);
        disp([leafs; singles])
        
        ratio = 0.2;
        limit  = ratio * sum_one_leaves;
               
        ind = find(leafs > limit, 1);
        ins = singles(1:ind) %%用作测试集1
%         ins = singles([kk(1), kk(2), kk(3)]);
%         allLen = 7;
        allLen = 9;
        ind2 = allLen - ind;
        setA = setdiff([1 : length(imdjson.Files)], singles);
        setA = setdiff(setA, fixTrain);
        setB = randperm(length(setA));        
%         ins2 = setA([setB(1), setB(2), setB(3)])
        ins2 = setA(setB(1: ind2))%%用作测试集2
        ins = [ins, ins2];%%Test的文件下标
        
        myMap = load('all-map', 'myMap').myMap;        
        
        fid = fopen(saveFilesOfTest_txt,'w');
        testFiles = {};
        for j = 1 : length(ins)          
           ii = ins(j);
           fileName = imdjson.Files{ii};
           
           [~, prefixName, ~] = fileparts(fileName);
           fprintf(fid, "%s\n", prefixName);
           testFiles{j} = prefixName;
           
           obj  = myMap(prefixName);
           columns = obj.cols;
           nums = obj.nums;
           for k = 1 : nums%%99
               tmpName = CImage.getString(k, columns);
               imgName  = [prefixName, '_', tmpName, '.jpg']; 
               jsonName = [prefixName, '_', tmpName, '.json']; 
%                imgName = [prefixName, '_', num2str(k, '%02d'), '.jpg']; 
%                jsonName = [prefixName, '_', num2str(k, '%02d'), '.json']; 
               imgName = fullfile(save_seg_img_dir, imgName);
               jsonName = fullfile(save_seg_img_dir, jsonName);
               
               if ~exist(jsonName,'file')
                   break;
               end
               disp(jsonName)
               
% %                copyfile(jsonName, saveTestImg_dir)
% %                copyfile(imgName, saveTestImg_dir)%%只移动了Test          
               movefile(jsonName, saveTestImg_dir)
               movefile(imgName, saveTestImg_dir)%%只移动了Test，剩下的train，人手copy 到trian目录
               %% 移动完test之后，则采用Python进行xml文件转换
            end
        end
        fclose(fid);
        save(saveFilesOfTest_mat, 'testFiles');
    end
    
    % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
    % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
    % % Step 8： 进行图像合并，对YoloV5输出的图片进行合并
    if bitand(step, step8)     
        disp('Step 8. ...............');
        
        saveTestImg_dir     = args.saveTestImg_dir;        
        saveFilesOfTest_txt = args.saveFilesOfTest;
        saveFilesOfTest_mat = [saveFilesOfTest_txt, '.mat'];
        save_image_bbox     = args.save_image_bbox;%args.save_image_bbox = 'F:\玉溪烟草\matlab\detect_all\';
        saveFileOfStat      = args.saveFileOfStat; %%最后的种子统计文件
        myMap = load('all-map', 'myMap').myMap;

        fid = fopen(saveFilesOfTest_txt);
        test_files = textscan(fid,'%s');
        test_files = test_files{1};        
        test_files = Helper.appendDirs(datapath, test_files);        
        imdjson    = imageDatastore(test_files, 'FileExtensions',{'.json'});
        
        dir_dectect_res  = [save_image_bbox, 'detection-results'];
        dir_ground_truth = [save_image_bbox, 'ground-truth'];
        
        fileStatID = fopen(saveFileOfStat,'w');
        for i = 1 : length(imdjson.Files)
            fileName = imdjson.Files{i};
            disp(fileName);            
            
            [dirpath, imgName, ~] = fileparts(fileName);
            
% %             if strcmp(imgName, 'seed(5)') ==false
% %                 continue;
% %             end            
            
            json_obj = JsonObject(fileName);
            
            imgPath = [dirpath, '\', json_obj.get_imagePath()];
            img = imread(imgPath);
            
            mapObj = myMap(imgName);
            cols = mapObj.cols;
            nums = mapObj.nums;
            
            imgObj = CImage(imgPath);
            [boxes, overlap, columns] = imgObj.getPatchGridEx();
            
            merge = CMerge(cols, nums);
            patchs = merge.getFiles(imgName, dir_dectect_res, dir_ground_truth, 0.5, 0.75);
            detects = merge.getMatchPatches(boxes);
            
            [sBbox, sScore, ins, detects] = CMerge.NMSboxes(detects, 0.4);%%抑制相互重叠的box 
            detects = CMerge.RefineBoxes(detects);%%去除partial
            
            fileSaveDrawBox = fullfile(save_image_bbox, json_obj.get_imagePath());%% 2选1，保存NMS与后续处理的图像
% %             fileSaveDrawBox = fullfile([save_image_bbox, 'noNMS'], json_obj.get_imagePath());%%保存没有NMS的图像
                        
% % %             isDraw128 = false;%%保存图片
% % %             CMerge.SaveImageAndBoxes(img, fileSaveDrawBox, detects, isDraw128)
      
% % % % % % % % % 画图OK            
% % % %             image(img)
% % % %             axis equal
% % % %             isDraw128 = false;
% % % %             CMerge.drawBoxes(detects, isDraw128); %  Helper.SaveFigure2Img(fileSaveDrawBox);%%像素太低不保存
            stat = CMerge.StatSeeds(detects);
            
            fprintf(fileStatID,'%s\t%d\t%d\t%d\t%d\n', imgName, stat(1), stat(2), stat(3), stat(4));
        end
        fclose(fileStatID);
    end
    
    if bitand(step, step10)     
        disp('Step 10. ...............');
        dstWidth = 640;
        dstHeight = 640;
        
        save_converted_dir = args.save_converted_dir;
        for i = 1 : length(imdjson.Files)
            fileName = imdjson.Files{i};
            disp(fileName);            
            
            [dirpath,imgName,ext] = fileparts(fileName);   
            json_obj = JsonObject(fileName, true);
            json_obj.json_data.imagePath = [imgName, '.jpg'];
            
            img = json_obj.convertTo640(dstWidth, dstHeight);%%转换图片
            
            fileSaveJson = fullfile(save_converted_dir, [imgName, ext]);
            fileSaveImg = fullfile(save_converted_dir, [imgName, '.jpg']);
            
            json_obj.encodeImageData(img, fileSaveImg, true);%%保存图片，并编码JSON图片
            json_obj.saveJsonFile(fileSaveJson);%%保存JSON
%             imwrite(img, fileSaveImg, 'Quality', 95);            
            
        end
    end
        
        
% % % % % % % % % % % % % % % % % % % % % % % % % %         
    if bitand(step, step11)     
        disp('Step 11. 把指定目录夹设置4翻转...............');
        
        bOrder = true;
        reChangCellToStruct = true;
        savejson_dir = args.save_rotate_path;
        saveimg_dir  = args.save_rotate_path; 
        
        for i = 1 : length(imdjson.Files)
            jsonName = imdjson.Files{i};
            disp(jsonName);            
            
            [dirpath, imgName, ext] = fileparts(jsonName);                    
            
            json_obj = JsonObject(jsonName, false, reChangCellToStruct);%%这些文件都已经排好序坐标  
            imgPath = fullfile(dirpath, json_obj.get_imagePath()); 
            
            jsonNameDst = fullfile(savejson_dir, [imgName, '__0.json']);
            imgNameDst  = fullfile(saveimg_dir, [imgName, '__0.jpg']);
            
            json_obj.json_data.imagePath = [imgName, '__0'];%%bug:没有设置好,复制了文件，没有修改改属性
            
            copyfile(jsonName, jsonNameDst);   
            copyfile(imgPath, imgNameDst);
            
            img = imread(imgPath);     

            nos = [1, 1, 1];
            begin = 1;
            SaveThreeRotation(json_obj, img, imgName, savejson_dir, saveimg_dir, nos, begin);  
        end
    end
 % % % % % % % % % % % % % % % % % % % % % % % % % %         
    if bitand(step, step12)     
        disp('Step 12. 把指定文件中的图片文件复制到目录夹...............');
        
        specificFiles = args.specificFiles;
        srcDir = args.srcDir; %%F:\玉溪烟草\matlab\seg
        destDir = args.destDir;  
        
        fileID = fopen(specificFiles);
        files = textscan(fileID, '%s');
        files = files{1};
        for i = 1 : length(files)
            fileName = files{i};
            disp(fileName);            
            
            [dirpath, imgName, ext] = fileparts(fileName);    
            
            imgPath = fullfile(srcDir, fileName);             
            imgNameDst  = fullfile(destDir, fileName);
            
            copyfile(imgPath, imgNameDst);  
            
            jsonPath = fullfile(srcDir, [imgName, '.json']);             
            jsonDst  = fullfile(destDir, [imgName, '.json']);
            copyfile(jsonPath, jsonDst);  
        end
    end
    % % % % % % % % % % % % % % % % % % % % % % % % % %
    disp('done');
end

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
%% 3次旋转
function SaveThreeRotation(json_obj, img, imgName, savejson_dir, saveimg_dir, nos, begin)
    if ismember(1, nos) == false
        return
    end

    json_new = copy(json_obj);    
        
    for i = 1 : length(nos)            
        img = json_new.rotateImage90(img);
        
        if nos(i) == 1
            imgName2 = [imgName, '__', num2str(begin)];
            json_save = [savejson_dir, imgName2, '.json'];
            img_save  = [saveimg_dir, imgName2, '.jpg'];
            
            json_new.encodeImageData(img, img_save, true)
            json_new.saveJsonFile(json_save);   
        end
        
        begin = begin + 1;  
    end
end
% 1次翻转
function SaveOneFlipAndThreeR(json_obj, img, imgName, savejson_dir, saveimg_dir, nos, begin)
    if ismember(1, nos) == false
        return
    end

    json_new = copy(json_obj);       
    img = json_new.fliplrImage(img);
    
    if nos(1) == 1    
        imgName2 = [imgName, '__', num2str(begin)];
        json_save = [savejson_dir, imgName2, '.json'];
        img_save  = [saveimg_dir, imgName2, '.jpg'];
        
        json_new.encodeImageData(img, img_save, true)
        json_new.saveJsonFile(json_save);
    end
    
    begin = begin + 1;   
    nos = nos(2:end);
    SaveThreeRotation(json_new, img, imgName, savejson_dir, saveimg_dir, nos, begin);
end
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
%% 批量保存图片
function SaveImages(imgs, imgName, saveimg_dir)
    for i = 1 : length(imgs)
        imgName2 = [imgName, '__', num2str(i)];
        img_save  = [saveimg_dir, imgName2, '.jpg'];

        img = imgs{i};
        imwrite(img, img_save, 'Quality', 95);        
    end
end

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
%% 3次旋转 只处理图片
function SaveThreeRotationImg(img, imgName, saveimg_dir)    
    for i = 1 : 3
        imgName = [imgName, '-r'];
        img_save  = [saveimg_dir, imgName, '.jpg'];

        img = rot90(img);
        imwrite(img, img_save, 'Quality', 95);
    end
end
% 1次翻转
function SaveOneFlipAndThreeRImg(img, imgName, saveimg_dir)
    imgName = [imgName, '-f'];
    img_save  = [saveimg_dir, imgName, '.jpg'];

    img = fliplr(img);

    imwrite(img, img_save, 'Quality', 95);
    
    SaveThreeRotationImg(img, imgName,  saveimg_dir);
end
